package com.itheima.d5_generics;

import java.util.ArrayList;

/**
 * 1、泛型其实就是一个类型变量，可以指定具体操作的数据类型。比如LArrayList<E>,可以限定集合操作的数据类型
 * 2、泛型的作用：可以在编译阶段去检查数据的类型是否合法，可以避免不必要的类型强制转换及类型转换异常
 * 3、如果没有给泛型指定具体类型，泛型代表的含义就是Object
 *
 */
public class Test1 {
    public static void main(String[] args) {
        // 目标：认识泛型
        //泛型若没有指定，默认就是Object类型
        ArrayList list = new ArrayList();
        list.add("Hello");//0
        list.add("Hello");
        list.add(1234);//2
        list.add(true);
        //当数据传入到集合中，数据的类型会提升为Object
        String o = (String) list.get(0);
        //强制转换类型，带来类型转换的异常
        String o1 = (String) list.get(2);
        System.out.println("o1 = " + o1);

        //通常会给泛型指定一个具体的类型
        ArrayList<String> names = new ArrayList<>();
        //names.add(100);//报错，在编译的时候就可以对类型进行检查，如果类型不对就会报错

        //泛型本质上是一个类型变量，可以使用类型来赋值而且只能使用引用类型来赋值
        ArrayList<String> list1 = new ArrayList<>();//E ->String
        ArrayList<Integer> list2 = new ArrayList<>();//E ->Integer


    }
}




